﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

//1.定义一个加法；
//#define MyAdd(x,y) x+y
#define MyAdd(x,y) ((x)+(y))
#define MyCompare(a,b) ((a)<(b))?(a):(b)

inline void myCompare(int a, int b)
{
	int ret = a < b ? a : b;
	cout << "ret = " << ret << endl;//11
}
//6.内联函数的注意事项；内联函数的声明；
inline void funcInline();
//7.如果内联函数在实现时，没有加inline关键字，那么这个函数依然不算内联函数；
inline void funcInline()
{};
//8.类内部的成员函数，默认前面会加上inline关键字；

void testMarcoFunc()
{
	//int ret = MyAdd(10, 20);

	//2.预期结果是600，然后10+20*20=410；--> ((10)+(20))*20=600
	int ret = MyAdd(10, 20) * 20;

	cout << "ret= " << ret << endl;//30 --> 410 --> 600

	int a = 10;
	int b = 20;

	//3.((a)<(b))?(a):(b)
	//int retCompare = MyCompare(a, b);

	//4.预期结果是11，实际是12，((++a)<(b))?(++a):(b)

	//int retCompare = MyCompare(++a, b);
	//cout << "retCompare= " << retCompare << endl;//10 --> 12

	//5.宏函数也没有作用域；内联函数，用来替代宏函数，实现替换函数；
	myCompare(++a, b);

}

//main247：内联函数引出宏函数缺陷
int main247()
{
	testMarcoFunc();

	system("pause");
	return EXIT_SUCCESS;
}